﻿using System;
using System.Windows.Forms;
using EvaluacionExalmarEntidades;
using EvaluacionExalmarLogicaNegocio;
using GlobalesUtilitarios;


namespace appEvaluacionExalmarMant
{
// ReSharper disable InconsistentNaming
    public partial class frmTablas : Form
// ReSharper restore InconsistentNaming
    {
        private Boolean _bNuevoCargo;
        private Boolean _bNuevoArea;
        private Boolean _bNuevoGerencia;

        public frmTablas()
        {
            InitializeComponent();
        }

        private void frmTablas_Load(object sender, EventArgs e)
        {
            try
            {
                dgvAreas.AutoGenerateColumns = false;
                dgvCargos.AutoGenerateColumns = false;
                dgvGerencias.AutoGenerateColumns = false;
                CargarCargos();
                CargarGerencias();
                CargarAreas();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, @"Evaluación de Personal", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarGerencias()
        {
            var oListaGerencias = new Gerencia().Listar(null);
            dgvGerencias.DataSource = oListaGerencias;

            cboGerencia.DataSource = oListaGerencias;
            cboGerencia.DisplayMember = "Descripcion";
            cboGerencia.ValueMember = "IdGerencia";
            //cboGerencia.SelectedIndex = -1;

            Generales.CellFormat(dgvGerencias);
        }

        private void CargarCargos()
        {
            dgvCargos.DataSource = new Cargo().Listar(null);
            Generales.CellFormat(dgvCargos);
        }

        private void CargarAreas()
        {
            dgvAreas.DataSource = new Area().Listar(null);
            Generales.CellFormat(dgvAreas);
        }

        private void btnNuevoArea_Click(object sender, EventArgs e)
        {
            txtIdArea.Text = "";
            txtArea.Text = "";
            //cboGerencia.SelectedIndex = -1;
            dgvAreas.Enabled = false;
            _bNuevoArea = true;
        }

        private void btnCancelarArea_Click(object sender, EventArgs e)
        {
            txtIdArea.Text = "";
            txtArea.Text = "";
            //cboGerencia.SelectedIndex = -1;
            dgvAreas.Enabled = true;
            _bNuevoArea = false;
        }

        private void btnGrabarArea_Click(object sender, EventArgs e)
        {
            int i;
            var nId = int.TryParse(txtIdArea.Text, out i) ? (int?)i : null;
            var sDescripcion = String.IsNullOrEmpty(txtArea.Text) ? null : txtArea.Text.Trim();
            var nIdGerencia = (int?) (cboGerencia.SelectedIndex == -1 ? null : cboGerencia.SelectedValue);

            if (!nId.HasValue && !_bNuevoArea)
            {
                MessageBox.Show(@"Debe seleccionar un área a actualizar", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sDescripcion == null)
            {
                MessageBox.Show(@"Debe ingresar la descripción del área", @"Evaluación de Personal", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }
            if (!nIdGerencia.HasValue)
            {
                MessageBox.Show(@"Debe seleccionar la gerencia del área", @"Evaluación de Personal", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }


            var oArea = new AreaInfo(nId, sDescripcion, nIdGerencia, null);

            if (_bNuevoArea)
            {
                if (new Area().Registrar(oArea))
                {
                    MessageBox.Show(@"Área registrado con éxito", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarAreas();
                    _bNuevoArea = false;
                    dgvAreas.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar el área", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Area().Actualizar(oArea))
                {
                    MessageBox.Show(@"Área actualizada con éxito", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarAreas();
                    _bNuevoArea = false;
                    dgvAreas.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar el área", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
        }

        private void btnNuevoCargo_Click(object sender, EventArgs e)
        {
            txtIdCargo.Text = "";
            txtCargo.Text = "";
            dgvCargos.Enabled = false;
            _bNuevoCargo = true;
        }

        private void btnCancelarCargo_Click(object sender, EventArgs e)
        {
            txtIdCargo.Text = "";
            txtCargo.Text = "";
            dgvCargos.Enabled = true;
            _bNuevoCargo = false;
        }

        private void btnGrabarCargo_Click(object sender, EventArgs e)
        {
            int i;
            var nId = int.TryParse(txtIdCargo.Text, out i) ? (int?)i : null;
            var sDescripcion = String.IsNullOrEmpty(txtCargo.Text) ? null : txtCargo.Text.Trim();

            if (!nId.HasValue && !_bNuevoCargo)
            {
                MessageBox.Show(@"Debe seleccionar un cargo a actualizar", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sDescripcion == null)
            {
                MessageBox.Show(@"Debe ingresar la descripción del cargo", @"Evaluación de Personal", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }
            var oCargo = new CargoInfo(nId, sDescripcion);

            if (_bNuevoCargo)
            {
                if (new Cargo().Registrar(oCargo))
                {
                    MessageBox.Show(@"Cargo registrado con éxito", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarCargos();
                    _bNuevoCargo = false;
                    dgvCargos.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar el cargo", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Cargo().Actualizar(oCargo))
                {
                    MessageBox.Show(@"Cargo actualizado con éxito", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarCargos();
                    _bNuevoCargo = false;
                    dgvCargos.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar el cargo", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
        }

        private void btnNuevoGerencia_Click(object sender, EventArgs e)
        {
            txtIdGerencia.Text = "";
            txtGerencia.Text = "";
            dgvGerencias.Enabled = false;
            _bNuevoGerencia = true;
        }

        private void btnCancelarGerencia_Click(object sender, EventArgs e)
        {
            txtIdGerencia.Text = "";
            txtGerencia.Text = "";
            dgvGerencias.Enabled = true;
            _bNuevoGerencia = false;
        }

        private void btnGrabarGerencia_Click(object sender, EventArgs e)
        {
            int i;
            int? nId = int.TryParse(txtIdGerencia.Text, out i) ? (int?)i : null;
            var sDescripcion = String.IsNullOrEmpty(txtGerencia.Text) ? null : txtGerencia.Text.Trim();

            if (!nId.HasValue && !_bNuevoGerencia)
            {
                MessageBox.Show(@"Debe seleccionar una gerencia a actualizar", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sDescripcion == null)
            {
                MessageBox.Show(@"Debe ingresar la descripción de la gerencia", @"Directorio Telefónico", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }
            var oGerencia = new GerenciaInfo(nId, sDescripcion);

            if (_bNuevoGerencia)
            {
                if (new Gerencia().Registrar(oGerencia))
                {
                    MessageBox.Show(@"Gerencia registrada con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarGerencias();
                    _bNuevoGerencia = false;
                    dgvGerencias.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar la gerencia", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Gerencia().Actualizar(oGerencia))
                {
                    MessageBox.Show(@"Gerencia actualizada con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarGerencias();
                    _bNuevoGerencia = false;
                    dgvGerencias.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar la sede", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
        }

        private void SeleccionarFilaCargo(int nFila)
        {
            txtIdCargo.Text = dgvCargos.Rows[nFila].Cells[0].Value.ToString();
            txtCargo.Text = dgvCargos.Rows[nFila].Cells[1].Value.ToString();
        }

        private void SeleccionarFilaArea(int nFila)
        {
            txtIdArea.Text = dgvAreas.Rows[nFila].Cells[0].Value.ToString();
            txtArea.Text = dgvAreas.Rows[nFila].Cells[1].Value.ToString();
            cboGerencia.SelectedValue = dgvAreas.Rows[nFila].Cells[2].Value;
        }

        private void SeleccionarFilaGerencia(int nFila)
        {
            txtIdGerencia.Text = dgvGerencias.Rows[nFila].Cells[0].Value.ToString();
            txtGerencia.Text = dgvGerencias.Rows[nFila].Cells[1].Value.ToString();
        }

        private void dgvGerencias_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoGerencia)
            {
                SeleccionarFilaGerencia(nFila);
            }
        }

        private void dgvGerencias_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoGerencia)
            {
                SeleccionarFilaGerencia(nFila);
            }
        }

        private void dgvAreas_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoArea)
            {
                SeleccionarFilaArea(nFila);
            }
        }

        private void dgvAreas_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoArea)
            {
                SeleccionarFilaArea(nFila);
            }
        }

        private void dgvCargos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoCargo)
            {
                SeleccionarFilaCargo(nFila);
            }
        }

        private void dgvCargos_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoCargo)
            {
                SeleccionarFilaCargo(nFila);
            }
        }
    }
}
